git 的 commit 訊息是個隨意格式的純文字文件,使用者可以使用 commit 的訊息快速理解各個 commit 的用途。
但由於 commit 訊息本身並沒有限制相關的寫法,因此常會造成不同人對於 commit 訊息編輯方式有所差異,這樣隨意的訊息所提供的資訊有些多、有些少,使得其幾乎沒有參考的價值。
Commitlint 是個 npm 套件,它使用 commit conventions 規範來檢查 commit 的訊息是否符合使用者所設定之規則。
透過配置檔 commitlint.config.js
的設定, Commitlint 可以知道要使用哪些規則規範 commit 訊息,並輸出相對的提示供使用者作為修改的依據。
使用 Commitlint 規範專案的 commit 訊息,可以讓所有人的訊息保持一致的格式,這樣做會有下列好處:
首先使用 npm
安裝 Commitlint :
npm install @commitlint/cli --save-dev
安裝完成後,由於 Commitlint 的配置檔是必要的,因此要建立配置檔 commitlint.config.js
:
module.exports = {
rules: {
'header-min-length': [2, 'always', 10],
},
};
配置檔中的屬性 rules
可以設定各式的規則,規則列表請參考 Commitlint 的官方頁面。
範例中設定訊息標頭的最小長度要大於 10
。
接著執行 commitlint
:
> echo 'foo' | npx commitlint
⧗ input: foo
✖ header must not be shorter than 10 characters, current length is 3 [header-min-length]
✖ found 1 problems, 0 warnings
ⓘ Get help: https://github.com/conventional-changelog/commitlint/#what-is-commitlint
當訊息為 foo
時,由於長度只有 3
,因此 Commitlint 會視為違規而輸出錯誤訊息。
為了節省使用者配置規則的時間, Commitlint 可以使用預先配置的規則包來設定多項規則。
在使用前須要先安裝:
npm install @commitlint/config-conventional --save-dev
這裡使用 @commitlint/config-conventional
是 Commitlint 提供的規則包。
安裝完成後,要在配置檔中設定使用規則包:
module.exports = {
extends: ['@commitlint/config-conventional'],
// ...
};
這樣一來 Commitlint 就會將 @commitlint/config-conventional
所配置的規則都納入並對訊息做相應的檢查。
到目前為止,我們都必須自己去叫用 Commitlint 才能作用,使用起來的步驟較原本多,也更不直覺,容易被忽略。
接下來我們藉由 Husky 的幫助,將 Commitlint 融入 Git flow 中,讓其更加的易用。
使用 husky add
將指令加入 Git hooks :
npx husky add .husky/commit-msg 'npx --no-install commitlint --edit "$1"'
修改完後,要重新註冊 Git hooks :
npm install
npm install
會觸發在執行 husky-init
時建立的 prepare
script ,去做相關的初始化工作。
如果需要 Husky 相關的使用說明,請看本系列的「 20 - Husky - Git Hooks 工具」一文的介紹。
完成設定後,當你輸入指令 git commit
,在完成編輯訊息後會啟動 Commitlint 檢查訊息。